package cn.kgc.utils;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * 代理类增强
 */
@Component("MaryUtil")
@Aspect //当前类是一个切面
public class MaryUtil {

    @Pointcut("execution(* cn.kgc.service.*.*(..))")
    public void pt(){
    }

    /**
     * 前置通知
     */
    @Before("pt()")
    public void helpToMary(){
        System.out.println("布置现场");
    }

    /**
     * 后置通知
     */
    @AfterReturning("pt()")
    public void endToMary(){
        System.out.println("清理现场");
    }

    /**
     * 作为异常通知使用
     */
    @AfterThrowing("pt()")
    public void afterThrowingPrintLogger(){
        System.out.println("我是异常通知,业务发生了异常");
    }

    /**
     * 作为最终通知使用
     */
    @After("pt()")
    public void afterPrintLogger(){
        System.out.println("我是最终通知,释放资源");
    }

    /**
     * 作为环绕通知使用
     */
    //@Around("pt()")
    public void arroundPrintLogger(ProceedingJoinPoint joinPoint) {

        try {
            //执行业务层的方法
            joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        } finally {
        }
    }
}
